from django.shortcuts import render

# Create your views here. 这里是控制器层
# 引入权限控制登录模块
from django.contrib.auth import authenticate, login, get_user_model
# 引入响应json格式
from django.http import JsonResponse
# 引入csrf验证
from django.views.decorators.csrf import csrf_exempt
# 引入json解析函数
import json

# 获取用户模型
User = get_user_model()

# 关闭 CSRF 保护
@csrf_exempt

# 定义注册方法，参数是请求类request
def register(request):
    # 如果请求方法是post
    if request.method == 'POST':
        # 获取所有的数据，使用json来解析
        data = json.loads(request.body)
        # 获取用户输入的用户名和密码
        username = data.get('username')
        password = data.get('password')

        # python的否定和或者的判断 ，都是使用英文单词，而不是! 和 ||
        if not username or not password:
            return JsonResponse({'error': 'Username and password are required.'}, status=400)
        # 这里相当于是laravel的模型查询User::where("username", "=", $username)->exists()
        if User.objects.filter(username=username).exists():
            return JsonResponse({'error': 'Username already exists.'}, status=400)

        # 这里相当于laravel的create方法
        user = User.objects.create_user(username=username, password=password)
        return JsonResponse({'message': 'User registered successfully.'}, status=201)

    # 不允许的访问方法
    return JsonResponse({'error': 'Invalid request method.'}, status=405)

# 登录方法
@csrf_exempt
def user_login(request):
    if request.method == 'POST':
        data = json.loads(request.body)
        username = data.get('username')
        password = data.get('password')
        # 权限验证，系统自带的方法
        user = authenticate(request, username=username, password=password)

        # 如果存在这个用户，那么就登录成功
        if user is not None:
            login(request, user)
            return JsonResponse({'message': 'Login successful.'}, status=200)
        else:
            return JsonResponse({'error': 'Invalid username or password.'}, status=401)

    return JsonResponse({'error': 'Invalid request method.'}, status=405)